﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;


namespace eCampus
{
    /// <summary>
    /// Formulario Consultar Noticia
    /// </summary>
    public partial class FormNoticiaConsultar : Form
    {
        /// <summary>
        /// variables
        /// </summary>
        string usuario;
        string asignaturaDelPadre;
        ENAsignatura asigs;
        
        /// <summary>
        /// Constructor sobrecargado con el usuario que lo ejecuta y con la asignatura con la que comienza 
        /// </summary>
        /// <param name="usu">usuario que lo ejecuta</param>
        /// <param name="codAsignatura">asignatura con la que comienza a funciona el formulario</param>
        public FormNoticiaConsultar(string usu, string codAsignatura)
        {
            usuario = usu;
            asignaturaDelPadre = codAsignatura;

            asigs = new ENAsignatura();
            InitializeComponent();

            cbTerminoBusqueda.SelectedIndex = 0;
            actualizaDatos(true);
        }

        /// <summary>
        /// Actualiza la tabla
        /// </summary>
        /// <param name="primeraVez"></param>
        private void actualizaDatos(bool primeraVez = false)
        {
            try
            {
                ENNoticias noticiaCriada = new ENNoticias();

                if (!btRestablecer.Visible)
                {
                    dgNoticia.DataSource = noticiaCriada.dimeNoticiasSegunUnaAsignatura(asignaturaDelPadre);
                }
                else
                {
                    dgNoticia.DataSource = noticiaCriada.Buscar(asignaturaDelPadre, tbBusquedaLibre.Text, cbTerminoBusqueda.SelectedIndex);
                }

                if (primeraVez)
                {
                    //Añade columna tipo
                    DataGridViewImageColumn ColTipo = new DataGridViewImageColumn();
                    ColTipo.Name = "adjunto";
                    ColTipo.HeaderText = "";
                    ColTipo.Image = eCampus.Properties.Resources.btDescargasMini;
                    ColTipo.Width = 25;
                    dgNoticia.Columns.Add(ColTipo);

                    //Añade columna eliminar
                    DataGridViewImageColumn ColEliminar = new DataGridViewImageColumn();
                    ColEliminar.Name = "elim";
                    ColEliminar.HeaderText = "";
                    ColEliminar.Image = eCampus.Properties.Resources.btBorrar;
                    ColEliminar.Width = 30;
                    dgNoticia.Columns.Add(ColEliminar);

                    dgNoticia.Columns["notId"].Visible = false;
                    dgNoticia.Columns["notFechaCreacion"].HeaderText = "Fecha";
                    dgNoticia.Columns["notEmisor"].HeaderText = "Autor";
                    dgNoticia.Columns["notreceptor"].Visible = false;
                    dgNoticia.Columns["notAsunto"].HeaderText = "Asunto";
                    dgNoticia.Columns["notAsunto"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                    dgNoticia.Columns["notMensaje"].HeaderText = "Mensaje";
                    dgNoticia.Columns["notMensaje"].Width = 250;
                    dgNoticia.Columns["notArchivo"].Visible = false;
                    dgNoticia.Columns["notVisibilidad"].Visible = false;
                    dgNoticia.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow;


                }
        
         }
         catch (Exception)
         {
             MessageBox.Show("Ha ocurrido un error al cargar los datos, disculpe las molestias","Error");
         
         }
        
        }

        /// <summary>
        /// Si no hay fichero adjunto no muestra el icono de descargar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgNoticia_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.Value != null)
            {
                if (dgNoticia.Columns["adjunto"].Index == e.ColumnIndex
                         && dgNoticia["notArchivo", e.RowIndex].Value.ToString() == "")
                {
                    e.Value = eCampus.Properties.Resources.blanco;
                }
            }
        }

        /// <summary>
        /// Elimina, modifica una noticia o descarga su fichero adjunto
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgNoticia_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                //Eliminar
                if (e.ColumnIndex == dgNoticia.Columns["elim"].Index && MessageBox.Show("¿Desea eliminar permanentemente la noticia \"" + dgNoticia["notAsunto", e.RowIndex].Value.ToString() + "\"?", "Eliminar evento", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    try
                    {
                        new ENNoticias().borraNoticia(dgNoticia["notId", e.RowIndex].Value.ToString());
                    }
                    catch (Exception x)
                    {
                        MessageBox.Show("Ha ocurrido un error al borrar" + "\r\n" + x.Message + "\r\n" + x.Source + "\r\n" + x.StackTrace, "Error");
                    }
                    actualizaDatos();  

                }
                
                //Descargar
                else if (e.ColumnIndex == dgNoticia.Columns["adjunto"].Index && dgNoticia["notArchivo", e.RowIndex].Value.ToString() != "")
                {
                    SaveFileDialog dialogoDescarga = new SaveFileDialog();
                    dialogoDescarga.Title = "Descargar";
                    dialogoDescarga.FileName = CADGestionDropbox.GetFicheroFromRuta(dgNoticia["notArchivo", e.RowIndex].Value.ToString().Replace('/', '\\'));
                    if (dialogoDescarga.ShowDialog() == DialogResult.OK)
                    {
                        if (new ENNoticias().Descargar(dgNoticia["notArchivo", e.RowIndex].Value.ToString(), dialogoDescarga.FileName.Substring(0, dialogoDescarga.FileName.LastIndexOf("\\"))))
                        {
                            MessageBox.Show("El fichero se ha descargado correctamente", "Descarga finalizada");
                        }
                        else
                        {
                            MessageBox.Show("La descarga no se realizó correctamente", "Error en la descarga");
                        }
                    }
                }
                // Modifica una noticia
                else
                {
                    ENNoticias en = new ENNoticias(int.Parse(dgNoticia["notId", e.RowIndex].Value.ToString()),
                                                   Convert.ToDateTime(dgNoticia["notFechaCreacion", e.RowIndex].Value.ToString()),
                                                   dgNoticia["notEmisor", e.RowIndex].Value.ToString(),
                                                   dgNoticia["notReceptor", e.RowIndex].Value.ToString(),
                                                   dgNoticia["notAsunto", e.RowIndex].Value.ToString(),
                                                   dgNoticia["notMensaje", e.RowIndex].Value.ToString(),
                                                   dgNoticia["notArchivo", e.RowIndex].Value.ToString(),
                                                   int.Parse(dgNoticia["notVisibilidad", e.RowIndex].Value.ToString()));

                    FormNoticiaNueva n = new FormNoticiaNueva(en);
                    n.ShowDialog();

                    actualizaDatos();
                }
            }
            
        }

        /// <summary>
        /// Crea una nueva noticia
        /// </summary>
        /// <param name="sender">Botón</param>
        /// <param name="entidadUsuario">Evento</param>
        private void btNueva_Click(object sender, EventArgs e)
        {
            btRestablecer.Visible = false;
            FormNoticiaNueva formNoticiaNueva = new FormNoticiaNueva(usuario,asignaturaDelPadre);
            formNoticiaNueva.ShowDialog();
            actualizaDatos();
        }

        /// <summary>
        /// Nueva búsqueda
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btNuevaBusqueda_Click(object sender, EventArgs e)
        {
            btRestablecer.Visible = true;
            actualizaDatos();
        }

        /// <summary>
        /// Elimina búsqueda
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btEliminarBusqueda_Click(object sender, EventArgs e)
        {
            btRestablecer.Visible = false;
            actualizaDatos();
        }
        

        #region Ayuda mediante tips
        private void btNueva_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(btNueva, "Publicar Nueva Noticia");
        }

        private void tbBusquedaLibre_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(tbBusquedaLibre, "Introduzca texto mediante el cuál buscar");
        }

        private void cbTerminoBusqueda_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(cbTerminoBusqueda, "Elija un término mediante el cuál buscar");
        }
        #endregion

        private void dgNoticia_SelectionChanged(object sender, EventArgs e)
        {
            dgNoticia.ClearSelection();
        }



    }
}
